import { Injectable, NestMiddleware } from '@nestjs/common'
import { Response, NextFunction } from 'express'

// @Injectable() 是一个非常重要的装饰器，
// 它的主要作用是将一个类标记为可注入的提供者（Provider），从而让这个类可以参与到 NestJS 的依赖注入系统中。
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  // next: NextFunction：是一个函数，调用它可以将请求传递给下一个中间件或路由处理程序。
  use(req: any, res: Response, next: NextFunction) {
    console.log('触发登录中间件', req.session)

    // 检查请求的会话对象 req.session 是否存在，以及会话对象中是否有 login 属性。
    // 如果会话对象不存在或者 login 属性为 false，则认为用户未登录。
    if (!req.session || !req.session.login) {
      // 使用 res.json 方法向客户端发送一个 JSON 响应
      return res.json({
        code: 401,
        msg: '未登录'
      })
    }
    next()
  }
}
